package aplicacao.lutador;

import aplicacao.GuiResultadoBusca;
import aplicacao.equipe.CRUDEquipe;
import aplicacao.interfaces.ResultadoBusca;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableCellRenderer;
import modelo.Equipe;
import modelo.Lutador;
import modelo.excecoes.DAOException;
import modelo.excecoes.EquipeDadoIncorretoException;
import modelo.excecoes.LutadorDadoIncorretoException;

/**
 *
 */
public class CRUDLutador extends javax.swing.JDialog implements 
        FocusListener, KeyListener, MouseListener, ResultadoBusca {

    /** Largura das colunas do jTable*/
    private final int[] larguraColunas = { 50, 250, 110, 240};

    /** Modo atual da tela de CRUD de lutadores*/
    private int modoAtual = 0;
    
    /** Creates new form LutadorCRUD */
    public CRUDLutador(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        
        // Setando ouvintes do Lutador
        jTableLutadores.addFocusListener(this);
        jTableLutadores.addMouseListener(this);
        jTableLutadores.addKeyListener(this);

        try {
            cmbEquipe.setModel(new ComboBoxModelEquipe());
        } catch (DAOException ex) {
            JOptionPane.showMessageDialog(this, "Erro no acesso ao banco " +
                    "de dados", "Erro", JOptionPane.ERROR_MESSAGE);
            throw new RuntimeException("Erro no acesso ao banco de dados");
        }
        
        // Ajusta o modelo do JTable
        try {
            jTableLutadores.setModel(new TableModelLutador());
        } catch (LutadorDadoIncorretoException ex) {
            JOptionPane.showMessageDialog(this, "Erro ao recuperar os dados " +
                    "dos lutadores.\n\n"+ex.getMessage(), 
                    "Erro", JOptionPane.ERROR_MESSAGE);
            util.Util.gravaExcecao(ex, this);            
            throw new RuntimeException();
        } catch (DAOException ex) {
            JOptionPane.showMessageDialog(this, "Problemas no acesso ao banco" +
                    " de dados", "Erro", JOptionPane.ERROR_MESSAGE);
            throw new RuntimeException("Erro no acesso ao banco de dados");
        } catch (EquipeDadoIncorretoException ex) {
            JOptionPane.showMessageDialog(this, "Erro ao recuperar os dados " +
                    "das equipes\n\n"+ex.getMessage(),
                    "Erro", JOptionPane.ERROR_MESSAGE);
            util.Util.gravaExcecao(ex, this);            
            throw new RuntimeException();
        }

        // Ajustando a largura das colunas
        jTableLutadores.getColumnModel().getColumn(0).setPreferredWidth(
                larguraColunas[0]);
        jTableLutadores.getColumnModel().getColumn(1).setPreferredWidth(
                larguraColunas[1]);
        jTableLutadores.getColumnModel().getColumn(2).setPreferredWidth(
                larguraColunas[2]);
        jTableLutadores.getColumnModel().getColumn(3).setPreferredWidth(
                larguraColunas[3]);
        
        DefaultTableCellRenderer modeloCelulaAlinhamento = 
                new DefaultTableCellRenderer();
        
        // Alinhando a primeira e a terceira coluna para o centro
        modeloCelulaAlinhamento.setHorizontalAlignment(JLabel.CENTER);
        
        jTableLutadores.getColumnModel().getColumn(0).setCellRenderer(
                modeloCelulaAlinhamento);
        jTableLutadores.getColumnModel().getColumn(2).setCellRenderer(
                modeloCelulaAlinhamento);
                
        // Ajustando tamanho, centralizando e exibindo a tela
        this.setSize(700, 450); //690, 423
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnConfirmar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        jpTabela = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        cmbGraduacao = new javax.swing.JComboBox();
        cmbGub = new javax.swing.JComboBox();
        jLabel6 = new javax.swing.JLabel();
        jtfDocumento = new javax.swing.JTextField();
        jLabel7 = new javax.swing.JLabel();
        jtfEmail = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        jtfIdade = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();
        jtfPeso = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        cmbEquipe = new javax.swing.JComboBox();
        jLabel8 = new javax.swing.JLabel();
        cmbSexo = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jtfNome = new javax.swing.JTextField();
        jlCRUDEquipe = new javax.swing.JLabel();
        jScrollPane = new javax.swing.JScrollPane();
        jTableLutadores = new javax.swing.JTable();
        jmbLutadores = new javax.swing.JMenuBar();
        jmIncluir = new javax.swing.JMenu();
        jmAlterar = new javax.swing.JMenu();
        jmExcluir = new javax.swing.JMenu();
        jmProcurar = new javax.swing.JMenu();
        jmSair = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Dados dos lutadores");
        setResizable(false);

        btnConfirmar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/aplicacao/imagens/icones/accept.png"))); // NOI18N
        btnConfirmar.setText("Confirmar");
        btnConfirmar.setEnabled(false);
        btnConfirmar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConfirmarActionPerformed(evt);
            }
        });

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/aplicacao/imagens/icones/cancel.png"))); // NOI18N
        btnCancelar.setText("Cancelar");
        btnCancelar.setEnabled(false);
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        jpTabela.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel2.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel2.setText("Graduação");

        cmbGraduacao.setFont(new java.awt.Font("Arial", 0, 12));
        cmbGraduacao.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "10", "9", "8", "7", "6", "5", "4", "3", "2", "1" }));
        cmbGraduacao.setEnabled(false);

        cmbGub.setFont(new java.awt.Font("Arial", 0, 12));
        cmbGub.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Gub", "Dan" }));
        cmbGub.setEnabled(false);

        jLabel6.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel6.setText("Documento");

        jtfDocumento.setFont(new java.awt.Font("Arial", 0, 12));
        jtfDocumento.setEnabled(false);

        jLabel7.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel7.setText("E-Mail");

        jtfEmail.setFont(new java.awt.Font("Arial", 0, 12));
        jtfEmail.setEnabled(false);

        jLabel4.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel4.setText("Ano Nasc.");

        jtfIdade.setFont(new java.awt.Font("Arial", 0, 12));
        jtfIdade.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jtfIdade.setToolTipText("Ano de nascimento do lutador");
        jtfIdade.setEnabled(false);

        jLabel5.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel5.setText("Peso");

        jtfPeso.setFont(new java.awt.Font("Arial", 0, 12));
        jtfPeso.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        jtfPeso.setEnabled(false);

        jLabel3.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel3.setText("Equipe:");

        cmbEquipe.setFont(new java.awt.Font("Arial", 0, 12));
        cmbEquipe.setEnabled(false);

        jLabel8.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel8.setText("Sexo");

        cmbSexo.setFont(new java.awt.Font("Arial", 0, 12));
        cmbSexo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Masculino", "Feminino" }));
        cmbSexo.setEnabled(false);

        jLabel1.setFont(new java.awt.Font("Arial", 1, 12));
        jLabel1.setText("Nome");

        jtfNome.setFont(new java.awt.Font("Arial", 0, 12));
        jtfNome.setEnabled(false);

        jlCRUDEquipe.setFont(new java.awt.Font("Arial", 1, 18));
        jlCRUDEquipe.setForeground(new java.awt.Color(51, 102, 255));
        jlCRUDEquipe.setText("+");
        jlCRUDEquipe.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jlCRUDEquipeMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout jpTabelaLayout = new javax.swing.GroupLayout(jpTabela);
        jpTabela.setLayout(jpTabelaLayout);
        jpTabelaLayout.setHorizontalGroup(
            jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpTabelaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jtfNome, javax.swing.GroupLayout.DEFAULT_SIZE, 646, Short.MAX_VALUE)
                    .addComponent(jLabel1)
                    .addGroup(jpTabelaLayout.createSequentialGroup()
                        .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jpTabelaLayout.createSequentialGroup()
                                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(jtfIdade)
                                    .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jtfPeso, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel5))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(cmbSexo, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel8))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jpTabelaLayout.createSequentialGroup()
                                        .addComponent(cmbGraduacao, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cmbGub, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                                    .addComponent(jLabel2)))
                            .addComponent(jLabel6)
                            .addComponent(jtfDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addGroup(jpTabelaLayout.createSequentialGroup()
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jLabel7))
                            .addComponent(jLabel3)
                            .addGroup(jpTabelaLayout.createSequentialGroup()
                                .addComponent(cmbEquipe, javax.swing.GroupLayout.PREFERRED_SIZE, 310, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(jlCRUDEquipe))
                            .addComponent(jtfEmail))))
                .addContainerGap())
        );
        jpTabelaLayout.setVerticalGroup(
            jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jpTabelaLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jtfNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(jLabel7))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jtfDocumento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jtfEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5)
                    .addComponent(jLabel8)
                    .addComponent(jLabel2)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jpTabelaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jtfPeso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmbSexo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmbGraduacao, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cmbGub, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jtfIdade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jlCRUDEquipe)
                    .addComponent(cmbEquipe, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(19, Short.MAX_VALUE))
        );

        jpTabelaLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jLabel1, jLabel2, jLabel3});

        jpTabelaLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jtfIdade, jtfPeso});

        jTableLutadores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jTableLutadores.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF);
        jScrollPane.setViewportView(jTableLutadores);

        jmIncluir.setText("Incluir");
        jmIncluir.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jmIncluirMousePressed(evt);
            }
        });
        jmbLutadores.add(jmIncluir);

        jmAlterar.setText("Alterar");
        jmAlterar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jmAlterarMousePressed(evt);
            }
        });
        jmbLutadores.add(jmAlterar);

        jmExcluir.setText("Excluir");
        jmExcluir.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jmExcluirMousePressed(evt);
            }
        });
        jmbLutadores.add(jmExcluir);

        jmProcurar.setText("Procurar");
        jmProcurar.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jmProcurarMousePressed(evt);
            }
        });
        jmbLutadores.add(jmProcurar);

        jmSair.setText("Sair");
        jmSair.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jmSairMousePressed(evt);
            }
        });
        jmbLutadores.add(jmSair);

        setJMenuBar(jmbLutadores);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jScrollPane, javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(btnConfirmar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnCancelar))
                    .addComponent(jpTabela, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {btnCancelar, btnConfirmar});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jpTabela, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnConfirmar)
                    .addComponent(btnCancelar))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 162, Short.MAX_VALUE)
                .addContainerGap())
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {btnCancelar, btnConfirmar});

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jlCRUDEquipeMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jlCRUDEquipeMouseClicked
        if (modoAtual == 0)
            return;
        
        // Abrindo CRUD de Equipes
        new CRUDEquipe( this, true);
    }//GEN-LAST:event_jlCRUDEquipeMouseClicked

    private void jmProcurarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jmProcurarMousePressed

        // Só permite se estiver em modo de navegação
        if(modoAtual!=0)
            return;
        
        String consulta = JOptionPane.showInputDialog(this, "Digite o nome " +
                "do lutador: ", "Consulta pelo nome do lutador", 
                JOptionPane.QUESTION_MESSAGE);

        // Se cancelou retorna
        if(consulta == null)
            return;
        
        // Se não digitou nada retorna
        if(consulta.trim().equals(""))
            return;
 
       ArrayList<Lutador> lutadores = null;
         
        try {
            lutadores = Lutador.getLutadoresPorNome(consulta);        
        } catch (EquipeDadoIncorretoException ex) {
            JOptionPane.showMessageDialog(this, "Erro ao recuperar os dados " +
                    "das equipes.\n\n"+ex.getMessage(), 
                    "Erro", JOptionPane.ERROR_MESSAGE);
            return;
        } catch (LutadorDadoIncorretoException ex) {
            JOptionPane.showMessageDialog(this, "Erro ao recuperar os dados " +
                    "dos lutadores.\n\n"+ex.getMessage(), 
                    "Erro", JOptionPane.ERROR_MESSAGE);
            return;
        } catch (DAOException ex) {
            JOptionPane.showMessageDialog(this, "Problemas com o banco de "+
                    "dados", "Erro", JOptionPane.ERROR_MESSAGE);
            return;  
        }        
        
        if(lutadores.size() > 0) 
            new GuiResultadoBusca( this, true, new TableModelLutador(lutadores),
                    this, larguraColunas, false);
        else 
            JOptionPane.showMessageDialog(this, "Nenhum lutador encontrado",
                    "Erro", JOptionPane.ERROR_MESSAGE);
        
    }//GEN-LAST:event_jmProcurarMousePressed

    private void jmExcluirMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jmExcluirMousePressed
        
        /* Se não estiver no modo de navegação ou se o lutador ativo for
         nulo, não permite a exclusão
         */
        if(modoAtual!=0 || this.getLutadorAtivo() == null)
            return;
        
        Object[] options = { "NÃO", "SIM" };
        int opcao;
        
        // 0 = não, 1 = sim
        opcao = JOptionPane.showOptionDialog(null,
                "deseja remover este lutador?", "Atenção",
                JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
                null, options, options[0]);
        
        if (opcao==1){
            try {
                
                this.getLutadorAtivo().delete();
                
            } catch (DAOException ex) {
                JOptionPane.showMessageDialog(this, ex.getMessage(),
                        "Erro", JOptionPane.ERROR_MESSAGE);
                return;       
            } finally {
                modoAtual = 0;
                ajustaControles();
                limpaCampos();
            }
            
        }                
            
    }//GEN-LAST:event_jmExcluirMousePressed

    private void jmAlterarMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jmAlterarMousePressed

        if(modoAtual!=0 || this.getLutadorAtivo() == null)
            return;
        
        // Alteração
        modoAtual = 2;
        
        preencheCampos();
        
        ajustaControles();
        
    }//GEN-LAST:event_jmAlterarMousePressed

    private void btnConfirmarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConfirmarActionPerformed

        /* Converte o objeto do combobox para inteiro e multiplica
         por 1 se for gub ou por -1 se dan */
        int graduacao = (Integer.parseInt( 
                (String) cmbGraduacao.getSelectedItem())) * (
                ((String) cmbGub.getSelectedItem()).equals("Gub") 
                ? 1:-1);
        
        Equipe equipe = (Equipe) cmbEquipe.getModel().getSelectedItem();
               
        if(modoAtual==2){
            
            try {
                
                this.getLutadorAtivo().setNome(jtfNome.getText());
                this.getLutadorAtivo().setEquipe(equipe);
                this.getLutadorAtivo().setGraduacao(graduacao);
                this.getLutadorAtivo().setPeso(
                        Double.parseDouble(jtfPeso.getText()));
                this.getLutadorAtivo().setAnoNasc(
                        Integer.parseInt(jtfIdade.getText()));
                this.getLutadorAtivo().setDocumento(
                        jtfDocumento.getText());
                this.getLutadorAtivo().setEmail(
                        jtfEmail.getText());
                this.getLutadorAtivo().setSexo(
                        ((String)cmbSexo.getSelectedItem()));
                
                this.getLutadorAtivo().update();
                
            } catch (NumberFormatException ex) {
                JOptionPane.showMessageDialog(this, "Os dados de peso e idade" +
                        " não podem estar em branco", "Erro",
                        JOptionPane.ERROR_MESSAGE);
                return;
            } catch (EquipeDadoIncorretoException ex) {
                JOptionPane.showMessageDialog(this, ex.getMessage(), "Erro",
                        JOptionPane.ERROR_MESSAGE);
                return;
            } catch (LutadorDadoIncorretoException ex) {
                JOptionPane.showMessageDialog(this, ex.getMessage(), "Erro", 
                        JOptionPane.ERROR_MESSAGE);
                return;
            } catch (DAOException ex) {
                JOptionPane.showMessageDialog(this, "Problemas com o banco de "+
                        "dados", "Erro", JOptionPane.ERROR_MESSAGE);
                return;       
            } finally {
                modoAtual = 0;
                ajustaControles();
                limpaCampos();
            }
            
        }
        
    }//GEN-LAST:event_btnConfirmarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed

        modoAtual = 0;
        
        this.limpaCampos();
        this.ajustaControles();
        
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void jmSairMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jmSairMousePressed
        
        if(modoAtual == 0)
            this.dispose();
        
    }//GEN-LAST:event_jmSairMousePressed

    private void jmIncluirMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jmIncluirMousePressed

        if(modoAtual!=0)
            return;
        
        // Trocando modo atual para inclusão
        modoAtual = 1;

        this.limpaCampos();

        this.ajustaControles();
        
    }//GEN-LAST:event_jmIncluirMousePressed
    
    private void limpaCampos() {
        
        jtfNome.setText("");
        jtfDocumento.setText("");
        jtfEmail.setText("");
        jtfPeso.setText("");
        jtfIdade.setText("");
        
    }
    
    private void ajustaControles() {
        
        boolean habilitado = false;
        
        switch (modoAtual) {
            
            case 0:
                habilitado = false;
                break;
                
            default:
                habilitado = true;
                break;                        
            
        }
        
        jtfDocumento.setEnabled(habilitado);
        jtfEmail.setEnabled(habilitado);
        jtfPeso.setEnabled(habilitado);
        jtfNome.setEnabled(habilitado);
        jtfIdade.setEnabled(habilitado);
        cmbEquipe.setEnabled(habilitado);
        cmbGraduacao.setEnabled(habilitado);
        cmbGub.setEnabled(habilitado);
        cmbSexo.setEnabled(habilitado);

        btnCancelar.setEnabled(habilitado);
        btnConfirmar.setEnabled(habilitado);
        
        jTableLutadores.setEnabled(!habilitado);
        
    }
    
    private void preencheCampos(Lutador lutadorAtivo) {

        if(lutadorAtivo == null)
            return;
        
        jtfNome.setText(lutadorAtivo.getNome());
        jtfDocumento.setText(lutadorAtivo.getDocumento());
        jtfEmail.setText(lutadorAtivo.getEmail());
        jtfPeso.setText(String.valueOf(lutadorAtivo.getPeso()));
        jtfIdade.setText(String.valueOf(lutadorAtivo.getAnoNasc()));

        // Setando equipe
        if(lutadorAtivo.getEquipe() !=null){
            cmbEquipe.getModel().setSelectedItem(lutadorAtivo.getEquipe());
            
        }

        // Setando a graduação no combo
        cmbGraduacao.setSelectedIndex(
                10 - Math.abs(lutadorAtivo.getGraduacao()));
        
        // Setando se é GUB ou DAN no combo
        if(lutadorAtivo.getGraduacao() > 0){
            cmbGub.setSelectedIndex(0);
        } else {
            cmbGub.setSelectedIndex(1);
        }
        
        // Setando o sexo no combo
        if(lutadorAtivo.getSexo().equalsIgnoreCase("M")){
            cmbSexo.setSelectedIndex(0);
        } else {
            cmbSexo.setSelectedIndex(1);
        }
        
    }
    
    private void preencheCampos() {
        
        preencheCampos(this.getLutadorAtivo());
        
    }    
    
    private Lutador getLutadorAtivo() {

        return ((TableModelLutador) jTableLutadores.getModel()).getLutador(
                jTableLutadores.getSelectedRow());
        
    }

    public void focusGained(FocusEvent e) {
        
        if (modoAtual != 0)
            return;
        
        preencheCampos();
        
    }

    public void focusLost(FocusEvent e) {
        
        if (modoAtual != 0)
            return;
        
        preencheCampos();        
        
    }

    public void keyTyped(KeyEvent e) {
    }

    public void keyPressed(KeyEvent e) {
     
    }

    public void keyReleased(KeyEvent e) {
        if (modoAtual != 0)
            return;
        
        preencheCampos();              
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mousePressed(MouseEvent e) {
        if (modoAtual != 0)
            return;
        
        preencheCampos();   
    }

    public void mouseReleased(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
    }

    public void mouseExited(MouseEvent e) {
    }

    public void setResultadoBusca(Object o) {

        Lutador lutador = (Lutador) o;
        
        int linha = ( (TableModelLutador) 
                jTableLutadores.getModel()).getRowOfObject(lutador);
        
        if(linha == -1)
            return;
        
        jTableLutadores.changeSelection( linha, 0, false, false);    
        
        if(o instanceof Lutador)
            this.preencheCampos(lutador);
        
    }
        
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnConfirmar;
    private javax.swing.JComboBox cmbEquipe;
    private javax.swing.JComboBox cmbGraduacao;
    private javax.swing.JComboBox cmbGub;
    private javax.swing.JComboBox cmbSexo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JScrollPane jScrollPane;
    private javax.swing.JTable jTableLutadores;
    private javax.swing.JLabel jlCRUDEquipe;
    private javax.swing.JMenu jmAlterar;
    private javax.swing.JMenu jmExcluir;
    private javax.swing.JMenu jmIncluir;
    private javax.swing.JMenu jmProcurar;
    private javax.swing.JMenu jmSair;
    private javax.swing.JMenuBar jmbLutadores;
    private javax.swing.JPanel jpTabela;
    private javax.swing.JTextField jtfDocumento;
    private javax.swing.JTextField jtfEmail;
    private javax.swing.JTextField jtfIdade;
    private javax.swing.JTextField jtfNome;
    private javax.swing.JTextField jtfPeso;
    // End of variables declaration//GEN-END:variables
    
}
